#coding:utf-8
'''
create on 2017-09-01

@author: sandy
'''


import sys,platform
sys.path.append("../")
from twisted.internet import reactor
from pycommon import Daemon
from pycommon import LogManager
from pycommon import RemoteManager
from pycommon import Utils
from pycommon import LogServer
import ServerConfig
import logging
import ClientFactory
import LoginMgrSite


if 'twisted.internet.reactor' not in sys.modules: 
    if platform.system() == "Linux":
        from twisted.internet import epollreactor
        epollreactor.install()  
    else:
        from twisted.internet import iocpreactor
        iocpreactor.install()


def ServerStart(isdaemon):
    logging.info("############Start LoginManagerServer############")
    ClientFactory.instance.start(ServerConfig.instance.server_ip,ServerConfig.instance.server_port,ServerConfig.instance.max_client)
    LoginMgrSite.instance.start(ServerConfig.instance.web_ip,ServerConfig.instance.web_port)
    
def ServerStop():
    ClientFactory.instance.stop()

def getConfig(isdaemon):
    configlist = RemoteManager.instance.getConfigList()
    RemoteManager.instance.requestConfig(configlist,ServerStart,isdaemon)

def getServerConfig(isdaemon):
    configlist = [u'server%d.*' % RemoteManager.instance.sid]
    RemoteManager.instance.addConfigCallback(ServerConfig.instance)
    RemoteManager.instance.requestConfig(configlist,getConfig,isdaemon)  

def daemonFunc(isdaemon):
    LogManager.instance.setupLog(RemoteManager.instance.loglevel,RemoteManager.instance.logfile,isdaemon)
    logging.info("############Update LoginManagerServer Config############")
    RemoteManager.instance.start(getServerConfig,isdaemon)
    reactor.run()
    ServerStop()

def run():
    sid, msip, msport, pidpath, logfile, loglevel, pathSelfConfig = Utils.loadDaemonConfig(ServerConfig.instance.rundir)
    RemoteManager.instance.init(sid,msip,msport,logfile, loglevel)
    Daemon.run(pidpath, daemonFunc)

if __name__ == "__main__":
    run()
